import axios from 'axios'

//超时
axios.defaults.timeout = 10000;
//默认请求的url
//axios.defaults.baseURL = 'https://www.easy-mock.com/mock/5bcea7dc4b7def525102a357/api';
axios.defaults.baseURL = 'http://localhost:9000/api/';
//跨域的请求头
axios.defaults.headers = {'Access-Control-Allow-Origin': '*'};

// 请求拦截器
axios.interceptors.request.use(function (config) {
    // 发送之前，不管，直接返回
    // 这里实现跨域
    //config.headers = {
    //    'Access-Control-Allow-Origin': '*'
    //};
    return config;
}, function (error) {
    //  1.判断请求超时
    if (error.code === 'ECONNABORTED' && error.message.indexOf('timeout') !== -1) {
        console.log('请求超时，请确定后台服务器是否打开');
        return;
        // return service.request(originalRequest);//例如再重复请求一次
    }
    // 请求错误，直接返回
    return Promise.reject(error);
});

// 响应拦截器
axios.interceptors.response.use(function (response) {
    // 响应数据，直接返回
    return response;
}, function (error) {
    // 响应错误，直接返回
    return Promise.reject(error);
});

/**
 * 拦截器的一切数据都不做处理
 */

/**
 * @data 2018/12/17:修复一个请求的错误，错误原因:错误的将请求参数进行了再次封装，由原有的key:value格式，变为了data:{key:value}，已修复...
 */

// get
export function get(url, params = {}) {
    // Promise是多线程异步获取数据，resolve，reject好像是es6的特征，用于then的，具体不清楚，但文档这样写，就这样写咯。。。改天仔细看看这个
    return new Promise((resolve, reject) => {
        axios.get(url, {params: params}).then(response => {
            resolve(response.data);
        }).catch(err => {
            reject(err);
        })
    })
}

//post
export function post(url, data = {}) {
    return new Promise((resolve, reject) => {
        axios.post(url, data).then(response => {
            resolve(response.data);
        }).catch(err => {
            reject(err);
        })
    })
}

//patch
export function patch(url, data = {}) {
    return new Promise((resolve, reject) => {
        axios.patch(url, data).then(response => {
            resolve(response.data);
        }).catch(err => {
            reject(err);
        })
    })
}

//put
export function put(url, data = {}) {
    return new Promise((resolve, reject) => {
        axios.put(url, data).then(response => {
            resolve(response.data);
        }).catch(err => {
            reject(err);
        })
    })
}

//delete
export function remove(url, data = {}) {
    return new Promise((resolve, reject) => {
        axios.delete(url, data).then(response => {
            resolve(response.data);
        }).catch(err => {
            reject(err);
        })
    })
}
